Para que o arquivo
fluxo_de_trabalho_codigos_interativo_final.Rmd funcione de
maneira adequada em sua mĂĄquina, vocĂȘ deve descompactar o arquivo
piper3D_monitora_florestal.zip. Uma nova pasta com o mesmo
nome serå criada no diretório escolhido para executar a descompactação.
Nela, vocĂȘ deverĂĄ clicar duas vezes sobre o Ăcone
Monitora.Rproj para começar a executar os arquivos contidos
no projeto. Ao realizar esse procedimento, vocĂȘ garantirĂĄ que seu
diretĂłrio de trabalho esteja configurado como o diretĂłrio da pasta
piper3d_monitora_florestal assegurando o funcionamento
correto dos cĂłdigos contidos no projeto.
A tabela aseguir Ă© uma referĂȘncia para as versĂ”es dos pacotes utilizados no nesse projeto. Para garantir a reprodução dos cĂłdigos, Ă© importante que o R e os pacotes usados no projeto apresentem as configuraçÔes mĂnimas contidas na tabela 1.
# gerar informaçÔes sobre os pacotes carregados
info <- sessionInfo()
# gerar tabela com os pacotes e versÔes
tribble(
~Pacotes, ~VersĂŁo,
version$language, version$version.string,
info$otherPkgs$dplyr$Package, info$otherPkgs$dplyr$Version,
info$otherPkgs$Distance$Package, info$otherPkgs$Distance$Version,
info$otherPkgs$DT$Package, info$otherPkgs$DT$Version,
info$otherPkgs$forcats$Package, info$otherPkgs$forcats$Version,
info$otherPkgs$flextable$Package, info$otherPkgs$flextable$Version,
info$otherPkgs$ggplot2$Package, info$otherPkgs$ggplot2$Version,
info$otherPkgs$ggpubr$Package, info$otherPkgs$ggpubr$Version,
info$otherPkgs$here$Package, info$otherPkgs$here$Version,
info$otherPkgs$lubridate$Package, info$otherPkgs$lubridate$Version,
info$otherPkgs$mrds$Package, info$otherPkgs$mrds$Version,
info$otherPkgs$plotly$Package, info$otherPkgs$plotly$Version,
info$otherPkgs$purrr$Package, info$otherPkgs$purrr$Version,
info$otherPkgs$readr$Package, info$otherPkgs$readr$Version,
info$otherPkgs$readxl$Package, info$otherPkgs$readxl$Version,
info$otherPkgs$stringi$Package, info$otherPkgs$stringi$Version,
info$otherPkgs$stringr$Package, info$otherPkgs$stringr$Version,
info$otherPkgs$tibble$Package, info$otherPkgs$tibble$Version,
info$otherPkgs$tidyr$Package, info$otherPkgs$tidyr$Version,
info$otherPkgs$tidyselect$Package,info$otherPkgs$tidyselect$Version
) |>
qflextable() |>
set_caption(
"Tabela 1 - configuração de pacotes necessĂĄrios e respectivas versĂ”es mĂnimas que devem ser utilizadas para reproduzir os cĂłdigos"
)
Pacotes | VersĂŁo |
|---|---|
R | R version 4.3.0 (2023-04-21) |
dplyr | 1.1.2 |
Distance | 1.0.7 |
DT | 0.27 |
forcats | 1.0.0 |
flextable | 0.9.1 |
ggplot2 | 3.4.2 |
ggpubr | 0.6.0 |
here | 1.0.1 |
lubridate | 1.9.2 |
mrds | 2.2.8 |
plotly | 4.10.1 |
purrr | 1.0.1 |
readr | 2.1.4 |
readxl | 1.4.2 |
stringi | 1.7.12 |
stringr | 1.5.0 |
tibble | 3.2.1 |
tidyr | 1.3.0 |
tidyselect | 1.2.0 |
A primeira função utlizada,
carregar_dados_brutos_xlsx(), irĂĄ carregar a planilha em
formato excel,
Planilha Oficial consolidada de Masto-aves 2014-21 Validada CEMAVE CPB CENAP.xlsx,
e gera automaticamente o arquivo dados_brutos.rds na pasta
data-raw. A função seguinte a ser utilizada,
carregar_dados_completos() que irĂĄ carregar o arquivo
dados_brutos.rds. Essa função foi escrita para carrega os
dados e operar uma sĂ©rie de transformaçÔes para devolvĂȘ-lo no formato
padronizado do programa DISTANCE para Windows.
Portanto, para garantir a reprodutibilidade dos cĂłdigos produzidos em
versÔes atualizadas da base de dados do Monitora, é importante tomar
alguns cuidados.
O primeiro e mais importante cuidado Ă© manter a consistĂȘncia
dos nomes das colunas em versÔes atualizadas da base de dados
do Monitora. Além de carregar os dados, a função
carregar_dados_completos() aplica uma série de
transformaçÔes nas colunas. Seus nomes são alterados, e a essas são
atribuĂdos tipos apropriados (data, caracter, fator, inteiro e
numérico), linhas são eliminadas e novas colunas são gereadas. Para
exemplificar, veja o cĂłdigo abaixo. Ele foi escrito para executar as
primeiras transformaçÔes nos dados e constitui o corpo da função
carregar_dados_filtrados().
# carregar a base de dados do Monitora
dados_brutos <- carregar_dados_brutos_xlsx()
# gerar o data.frame desejado reproduzindo as transformaçÔes realizadas pela função carregar_dados_completos()
dados_filtrados <- dados_brutos |>
# selecionar as colunas necessĂĄrias para as analises, padronizando os nomes para o formato DISTANCE
dplyr::select(
uc_code = CDUC,
uc_name = `Local - Nome da Unidade de Conservacao`,
ea_number = `Numero da Estacao Amostral`,
ea_name = `Nome da EA`,
season = `Estacao do ano`,
sampling_day = `data da amostragem`,
day_effort = `Esforco de amostragem tamanho da trilha (m)`,
sp = `Especies validadas para analise do ICMBio`,
distance = `distancia (m) do animal em relacao a trilha`,
group_size = `n de animais`,
observadores = `nome dos observadores`
) |>
# atribuir os tipos corretos Ă s colunas e criar novas colunas
dplyr::mutate(
uc_category = stringi::stri_extract_first_words(
uc_name
),
# abrevia o nome das UCs
uc_name_abv = forcats::lvls_revalue(
uc_name,
new_levels = c(
"ETM", "EM", "EN", "ESGT", "FJ", "PCV", "PA", "PSBoc", "PSBod", "PSC",
"PSM", "PSC", "PSD", "PSP", "PSO", "PPN", "PCO", "PI", "PJaĂș", "PJur",
"PMR", "PS", "PV", "PCA", "PMT", "RG", "RJ", "RTap", "RU", "RG",
"RTrom", "RAT", "RBA", "RCI", "RCM", "RRC", "RROP", "RIA", "RRA", "RTA"
)
),
# atribuir o tipo data Ă coluna sampling_day
year = lubridate::year(
sampling_day
),
# atribuir o tipo fator Ă s colunas do tipo caracter
across(
where(
is.character
),
as.factor
),
# substituir separadores de nome por ","
novo = stringr::str_replace_all(
observadores,
" e ",
", "
),
# substituir separadores de nome por ","
novo = stringr::str_replace_all(
novo,
" E ",
", "
),
# substituir separadores de nome por ","
novo = stringr::str_replace_all(
novo,
"/",
", "
),
# substituir separadores de nome por ","
novo = stringr::str_replace_all(
novo,
";",
", "
),
# substituir separadores de nome por ","
novo = stringr::str_replace_all(
novo,
" a ",
", "
)
) |>
# transformar os nomes dos observadores da coluna novo em colunas individuais
tidyr::separate_wider_delim(
novo,
",",
names = c(
"obs1", "obs2", "obs3", "obs4", "obs5", "obs6"
),
too_few = "align_start"
) |>
# gerar uma nova coluna number_observers com o nĂșmero total de observadores em um mesmo transecto
dplyr::mutate(
# se o valor da observação é diferente de NA, substituir por 1, se for NA, substituir por 0
obs1 = ifelse(!is.na(obs1), 1, 0),
obs2 = ifelse(!is.na(obs2), 1, 0),
obs3 = ifelse(!is.na(obs3), 1, 0),
obs4 = ifelse(!is.na(obs4), 1, 0),
obs5 = ifelse(!is.na(obs5), 1, 0),
obs6 = ifelse(!is.na(obs6), 1, 0),
# gera nova coluna number_observers a partir da soma das colunas de observadores individuais
number_observers = obs1 + obs2 + obs3 + obs4 + obs5 + obs6
) |>
# agrupar os dados pelas colunas ea_name e sampling_day
group_by(
ea_name,
sampling_day
) |>
# aninhar as observaçÔes agrupadas uem listas
nest() |>
# completar com o valor correto as linhas vazias das da variĂĄvel day_effort
mutate(
day_effort2 = purrr::map(
data, \(.x) rep(
.x$day_effort[
!is.na(
.x$day_effort
)
][1]
)
)
) |>
# desanihar os dados
unnest(
c(
data,
day_effort2
)
) |>
# desagrupar os dados
ungroup() |>
# selecionar as colunas desejadas e excluir as indesejadas
select(
tidyselect::starts_with(c("uc", "ea")),
season,
year,
sampling_day,
day_effort = day_effort2,
sp:number_observers,
-day_effort,
-tidyselect::starts_with("obs")
) |>
# filtrar os dados pela UC e espécie desejadas
dplyr::filter(
uc_name == "Resex Tapajos-Arapiuns",
sp == "Dasyprocta croconota"
) |>
relocate(
uc_category,
.before = uc_name
) |>
relocate(
uc_name_abv,
.after = uc_name
)
# gerar tabela dinĂąmica dos dados completos
dados_filtrados |>
slice(
1:1000
) |>
datatable(
filter = list(
position = "top"
)
)
O trecho do código que vai da linha 96 a 106 serve selecionar apenas as colunas de interesse presente nos dados originais. Note que os nomes das planilhas originais constam nesse trecho. Caso o nome de qualque uma dessas colunas seja alterado a função deixarå de funcionar.
Outro aspecto importante é a presença de observaçÔes não preenchidas
(ex. células vazias) nos dados originais. A função foi desenha para
resolver alguns problemas presentes nos dados originais. Por exemplo,
nas o trecho do código das linhas 194 a 210 as observaçÔes vazias
(NAs) sĂŁo substituidas pelo valor correto na coluna
day_effort. Essa correção continnuarå sendo realizada em
versÔes atualizadas dos dados do Monitora. Porém, se outras colunas além
das que estão sendo corrigidas possuirem observaçÔes vazias os dados
serão carregados e transformados, porém outras funçÔes podem ter o seu
funcionamento comprometido. Por exemplo, funçÔes de visualização e do
pacote Distance que podem nĂŁo funcionar devido a ausĂȘncia
de observação.
Dentre todas as funçÔes de carregamento de dados, apenas
carregar_dados_brutos_xlsx() carrega a base de dados
originais do Monitora, diretamente do diretĂłrio
data-raw/monitora_masto_aves_2023_04_04.xlsx. Ao mesmo
tempo que carrega e transforma os dados, essa função gera uma versão em
um formato mais leve, .rds, no diretĂłrio
data-raw
(data-raw/monitora_masto_aves_2023_04_04.rds). A função
seguinte no fluxo de trabalho carrega a base a partir dessa versĂŁo mais
leve. Logo, sempre que houver atualizaçÔes no arquivo original de dados
brutos Ă© necessĂĄrio iniciar a rotina de carregamento de dados
necessariamente com a função
carregar_dados_brutos_xlsx().
NĂŁo precisa se assustar com a infinidade de cĂłdigos no exemplo acima.
Eles foram utilizados apenas para ilustrar que construir essas funçÔes
facilita a execução e a reprodutibilidade das anålise dos dados do
Monitora. Para cada tarefa existe uma função cujo funcionamento
necessita o preenchimento de alguns argumentos, ou mesmo de nenhum
(embora seja sempre possĂvel fornecĂȘ-los). Por traz das cortinas, as
funçÔes executam as tarafas necessårias para se obter o resultado
desejado. Por exemplo, o mesmo resultado pode ser obtido utilizando
apenas duas funçÔes: carregar_dados_brutos_xlsx()e
gerar_tabdin_dados_brutos().
A função gerar_tabdin_dados_brutos(), por configuração,
gera uma tabela dinĂąmica com 1000 linhas. VocĂȘ pode controlar o nĂșmero
de linhas pelo argumento n_linhas =. Mas atenção! Ela não
funcionarĂĄ com um nĂșmero superior a 4.500 linhas. Ao
mudar a entrada de dados usando o argumento dados =,
certifique-se de que seu nĂșmero de linhas nĂŁo exceda esse limite (ex.
4.500).
gerar_tabdin_dados_brutos(
n_linhas = 1:4500
)
# carregar dados para o R
dados_completos <- carregar_dados_completos()
# gerar tabela dinamica dos dados completos
gerar_tabdin_dados_completos()
# carregar dados para o R
dados_filtrados <- carregar_dados_filtrados()
# gerar tabela dinĂąmica dos dados fitrados
gerar_tabdin_dados_filtrados()
# transformar os dados para o formato do Distance
dados_distanceR_completo <- transformar_para_distanceR_covariaveis()
# gerar tabela dinamica dos dados no formato do distance do R
gerar_tabdin_dados_selecionados_distanceR_cov()
Apresentamos abaixo um conjunto de ferramentas que permite diversas formas de explorar todo o conjunto de dados.
Alguns cuidados devem ser tomados na preparação dos dados antes de serem analisados. O primeiro deles é o cuidado taxonÎmico. Para os dados do Monitora recomenda-se o uso dos dados das espécies validadas para anålise pelo ICMBio, conforme o modelo utilizado para este fluxo de trabalho.
Alguns problemas com os dados, que podem trazer efeitos indesejados sobre as anålises, podem ser detectados durante a fase de exploração. Ao selecionar os dados que serão analisados, é importante observar os seguintes aspectos:
SuficĂȘncia Amostral - nĂșmero de ocorrĂȘncias por espĂ©cie
Para que o mĂ©todo de anĂĄlise por distĂąncia possa ser utilizado para estimativas baseadas em modelos, sĂŁo recomendadas quantidades mĂnimas de registros de ocorrĂȘncia e de transectos (Unidades Amostrais). Segundo BUCKLAND et. al. (2015), o nĂșmero mĂnimo sugerido de animais ou grupos (ocorrĂȘncias) Ă© de 60 â 80 animais (ou grupos) quando a amostragem Ă© feita pelo mĂ©todo dos transectos lineares. Ă possĂvel utilizar nĂșmeros menores que estes para realizar as anĂĄlises, porĂ©m deve-se ter o cuidado de verificar se as funçÔes de detecção estĂŁo bem modeladas.
Para dados que serĂŁo estratificados (divididos em subconjuntos),
estes nĂșmeros recomendados se aplicam a cada subconjunto. Isso ocorre
porque as funçÔes de detecção serão modeladas para cada estrato
(p.ex.Region.Label), além da função de detecção para os
dados globais. Um exemplo seria a anĂĄlise dos dados, para uma mesma
espĂ©cie, em diferentes UCs. Neste caso, o ideal seria ter a suficiĂȘncia
amostral mĂnima em cada UC para usar estratificação e estimar
abundĂąncias e densidades em cada uma das UCs.
SuficiĂȘncia amostral - rĂ©plicas e repetiçÔes
Para que haja uma boa cobertura da ĂĄrea de estudo e tambĂ©m uma boa quantidade de amostras independentes para estimar as abundĂąncias e densidades das espĂ©cies, Ă© desejĂĄvel um nĂșmero satisfatĂłrio de rĂ©plicas independentes. Segundo BUCKLAND et al. (2015), o nĂșmero mĂnimo de rĂ©plicas independentes para os transectos deve ser de 10-20, o que deve aumentar para espĂ©cies cujas populaçÔes sĂŁo distribuĂdas em manchas.
De forma geral, para cada UC, o nĂșmero de rĂ©plicas do Programa Monitora estĂĄ abaixo do recomendado. O delinamento amostral atual para a compontente Florestal do subprograma Terrestre estabelece um nĂșmero mĂnimo de trĂȘs EstaçÔes Amostrais por Unidade de Conservação, o que Ă© o caso de muitas UCs, chegando ao mĂĄximo de 9 estaçÔes amostrais por UC. O baixo nĂșmero de rĂ©plicas espaciais idependentes nĂŁo chega a ser um problema na estimativa de densidade da Ărea Coberta pela amostragem, mas limita uma boa estimativa de densidade total para a Unidade de Conservação.
Um outro aspecto relacionado a amostragem Ă© o nĂșmero de repetiçÔes por transecto. Segundo BUKLAND et al (2001, pg 79), as repetiçÔes devem ser incorporadas no esforço amostral multiplicando-se o nĂșmero de vezes que o transecto foi percorrido pelo comprimento do transecto. A mesma recomendação Ă© dada pelo Curso Online em Distance Sampling link. Esse ajuste no esforço amostral nĂŁo deve ter grandes consequĂȘncias para um baixo nĂșmero de repetiçÔes. PorĂ©m, nĂșmeros altos de amostragens repetidas e nĂŁ independentes levam a uma inflagem no tamanho da ĂĄrea coberta. Apenas para ilustar com um exemplo, para os dados da cutia Dasyprocta croconota da Resex TapajĂłs-Arapinuns, a Estação Amostral Boim foi percorrida durante 70 dias de amostragem. Isso significa que ajustando o comprimento do transecto de 5 km pelo nĂșmero de repetiçÔes, o esforço amostral passou para 350 km. A ĂĄrea coberta aumentou em 70x, o que terĂĄ consequĂȘncias sobre a estimativa densidade, que tenderĂĄ a ser subestimada. AlĂ©m disso, o coeficiente de variação das estimativas de taxa de encontro, abundĂąncia e densidade tambĂ©m tenderĂŁo a aumentar pelo efeito da variaçÔes temporais entre as amostragens.
Uma forma de lidar com o excesso de amostragens repetidas Ă© tratar as repetiçÔes como efeitos aleatĂłrios dos modelos. Isso requer o uso de abordagens que vĂŁo alĂ©m da amostragem por distĂąncia convecional, como o uso de Mixed Effect Models e Modelos HierĂĄrquicos (p. ex. OEDEKOVEN et al. 2013, 2014). Essas abordagens ainda nĂŁo foram implementadas em nosso fluxo de trabalho atĂ© a presente versĂŁo e pretendemos testar os cĂłdigos para esta abordagem utilizando o pacote unmarked atĂ© o final da vigĂȘncia do presente projeto.
Distribuição de frequĂȘncia das ocorrĂȘncias em relação Ă distĂąncia - efeitos indesejados
A distribuição ideal das frequĂȘncias de ocorrĂȘncia em relação Ă distĂąncia deve apresentar as seguintes caracterĂsticas: a frequĂȘncia de ocorrĂȘncia deve ser maior prĂłximo a zero, apresentar um longo platĂŽ (ombro), e decair gradativamente com o aumento da distĂąncia. Isso significa que os animais sĂŁo totalmente detectĂĄveis na distĂąncia zero, seguem sendo bem detectĂĄveis a distĂąncias curtas e vĂŁo perdendo detectabilidade gradativamente com o aumento da distĂąncia.
Por isso, uma das etapas exploratĂłrias Ă© avaliar o histograma de frequĂȘncias de ocorrĂȘncia ao longo da distĂąncia em relação ao transecto (opção abaixo). Algumas distribuiçÔes indicam problemas nos dados que podem dificultar o ajuste das funçÔes de detecção. Tais como:
Pico de ocorrĂȘncias prĂłximos Ă distĂąncia zero - spike near zero distance
Isso ocorre quando o nĂșmero de observaçÔes prĂłximos Ă distĂąncia zero Ă© inflado em relação Ă s demais distĂąncias. O efeito grĂĄfico serĂĄ um pico no histograma em zero ou prĂłximo a zero, conforme o exemplo abaixo para os dados extraĂdos das cutias (Dasyprocta croconota) na Resex TapajĂłs-Arapiuns.
Distribuicao de Frequencia para Dasyprocta croconota na Resex Tapajos-Arapiuns
Este tipo de distribuição foi predominante para as espĂ©cies com o maior nĂșmero de ocorrĂȘncia nos dados de aves e mamĂferos do Programa Monitora Florestal. Acreditamos que existem dois fatores que podem estar causando esse acĂșmulo de dados em zero ou prĂłximo a ele. Um deles seria um viĂ©s para avistamento de animais na trilha em ambientes de floresta. As trilhas podem atrair animais, e tambĂ©m oferecem melhor visibilidade em relação Ă floresta, especialmente se o sub-bosque for denso. O outro fator seria um possĂvel arredondamento nas distĂąncias prĂłximas a zero, o que pode gerar um âamontoamentoâ nos dados (heaping). Recomenda-se que valores de distĂąncia perpendicular nunca sejam arredondados.
Resposta evasiva das espécies em relação ao observador
Para espĂ©cies que podem apresentar resposta de deslocamento em relação ao observador, um dos efeitos indesejados nos dados Ă© o deslocamento das maiores frequĂȘncias de observaçÔes para as distĂąncias perpendiculares intermediĂĄrias ao mesmo tempo que as frequĂȘncias prĂłximas ao observador sĂŁo baixas. Uma alternativa, nesse caso, Ă© constranger a função de deteção para monotonicidade, evitando que ela suba para se ajustar ao pico de frequĂȘncia nas distĂąncias intermediĂĄrias.
Viés de tamanho de grupo
Um dos efeitos que pode ocorrer para espĂ©cies que formam grupos, Ă© que grupos menores perdem a detectabilidade mais fĂĄcil do que grupos maiores com o aumento da distĂąncia. Esse viĂ©s pode ser testado na exploração dos dados das covariĂĄvies, plotando-se um grĂĄfico de tamanho de grupo pela distĂąncia. Caso o viĂ©s ocorra, serĂĄ uma observada uma tendĂȘncia de registros somente de grupos maiores nas distĂąncias maiores. NĂłs adotamos a estratĂ©gia de tratar tamanho de grupo como covariĂĄvel para espĂ©cies que formam grupos. Neste caso, ao mesmo tempo que lidamos com o efeito do tamanho do grupo na detectabilidade, incorporamos tambĂ©m o tamanho do grupo nas estimativas de densidade e abundĂąncia.
Essas operaçÔes são realizadas sobre a tabela de dados
dados_completos pois os dados que foram transformados para
o formato do distace no R nĂŁo possuem a coluna validation,
necessåria para essas opereaçÔes. Mais a frente o procedimento de como
obter os dados selecionados e transformatos para o formato das anĂĄlises
serĂĄ demonstrado.
# contar observaçÔes validadas ao nĂvel de espĂ©cie
n_obs_validadas <- contar_n_obs_validadas()
n_obs_validadas
[1] 19747 307 6187 14 165
Foram selecionadas apenas as observaçÔes validadas ao nĂvel de espĂ©cie, somando um total 19747 observaçÔes.
Finalmente chegamos ao subconjunto dos dados que serå utilizado para selecionar quais espécies serão analisadas.
# gerar tabela de dados selecionados
dados_selecionados <- carregar_dados_selecionados()
# gerar tabdin dados_selecionados
gerar_tabdin_dados_selecionados()
# contar nĂșmero total de UC's
n_ucs <- contar_n_uc()
n_ucs
[1] 38
Os dados são provenientes de 38 unidades de conservação ao todo.
n_sp <- contar_n_sp()
n_sp
[1] 165
Até aqui temos dados para 165 espécies.
# contar nĂșmero de observaçÔes por UC
n_obs_uc <- contar_n_obs_uc()
# gerar tabdin
gerar_tabdin_n_obs_uc()
# plotar o nĂșmero de observaçÔes por UC
plotar_n_obs_uc_interativo()
# contar total sp
n_obs_sp <- contar_n_obs_sp()
n_obs_sp
# contar o nĂșmero de observaçÔes por espĂ©cie
n_obs_sp <- contar_n_obs_sp()
# gerar tabela dinĂąmica com o nĂșmero total de obsevaçÔes por espĂ©cie
gerar_tabdin_n_obs_sp()
# plotar o o nĂșmero de observaçÔes por UC
plotar_n_obs_sp_interativo()
Tabela interativa para consulta do nĂșmero de observaçÔes por espĂ©cie.
gerar_tabdin_n_obs_sp()
Quitting from lines 401-402 (fluxo_trabalho_codigos_interativo_final.Rmd)
# gerar tabela com o nĂșmero de observaçÔes por espĂ©cie e por UC
n_obs_sp_uc <- contar_n_obs_sp_uc()
n_obs_sp_uc
gerar_tabdin_n_obs_sp_uc()
Gerar função para tabela dinùmica.
gerar_tabdin_n_uc_ano()
n_ano_uc <- contar_n_ano_uc()
`summarise()` has grouped output by 'uc_name'. You can override using the `.groups` argument.
n_ano_uc <- contar_n_ano_uc()
`summarise()` has grouped output by 'uc_name'. You can override using the `.groups` argument.
n_ano_uc
n_obs_uc_ano <- contar_n_obs_uc_ano()
n_obs_uc_ano
Tabela interativa para consultar quantas observaçÔes foram realizadas por ano em cada UC
gerar_tabdin_n_obs_uc_ano()
n_obs_sp_ano <- contar_n_obs_sp_ano()
n_obs_sp_ano
Tabela interativa para consultar quantas observaçÔes foram realizadas para cada espécie em cada ano
gerar_tabdin_n_obs_sp_ano()
Tabela interativa para consultar quantas observaçÔes foram realizadas para cada espécie em cada ano
gerar_tabdin_n_obs_sp_uc_ano()
n_obs_sp_uc_estacao_ano <- contar_n_obs_sp_uc_estacao_ano()
n_obs_sp_uc_estacao_ano
gerar_tabdin_n_obs_sp_uc_estacao_ano()
PossĂveis estratificaçÔes espaciais â EAs/UCs
- UCs/Espécies
# gerar o gråfico exploratório da distribuição de distùncias perpendiculares para a espécies Dasyrocta croconota na Resex Tapajós-Arapiuns
fig <- dados_filtrados |>
# excluir NA's da variĂĄvel distance
tidyr::drop_na(distance) |>
plotar_distribuicao_distancia_interativo()
fig
â As covariĂĄveis devem ser pensadas de acordo com o grupo taxonĂŽmico. EspĂ©cies que formam grupos devem ter a covariĂĄvel âsizeâ.
As estratĂ©gias de estratificação podem ser substituĂdas por covariĂĄveis tambĂ©m (estratos espaciais/ ano)
Como covariåvel temporal, pode se pensar em usar, além do ano, a estação do ano (season), o horårio do dia (para animais que variam a atividade). O horårio do dia pode ser convertido em tempo após nascer do sol (como no exemplo). Mas para isso é necessårio criar essa variåvel no dataset. E não é trivial porque precisa saber o horårio de nascer do sol em cada dia/local para calcular.
ATENĂĂO: gerar grĂĄficos distĂąncia x covariĂĄvel
Exemplo de Gråficos de Marques et al. 2007
A seguir, apresentamos o fluxo de anĂĄlise dos dados que envolve a fase exploratĂłria, truncamento, ajuste e avaliação de modelos e estimativas de abundĂąncia e densidade para as espĂ©cies que selecionamos como modelo. Usamos como critĂ©rios de seleção tanto o nĂșmero de ocorrĂȘncias por Unidade de Conservação quanto a distribuição das frequĂȘncias de observação, nos casos em que isso foi possĂvel. De forma geral, as espĂ©cies com nĂșmero satisfatĂłrio de ocorrĂȘncias (>60), apresentaram pico de observaçÔes prĂłximos a zero.
NĂłs usamos como modelo para este fluxo Dasyprocta croconota da Resex TapajĂłs-Arapiuns, pelo grande nĂșmero de ocorrĂȘncias para uma mesma UC. NĂłs implementamos duas estratĂ©gias para lidar com os efeitos indesejados nos dados: pico prĂłximo a zero (heaping near zero) e nĂșmero excessivo de repetiçÔes amostrais na mesma trilha. Para lidar com os picos, testamos o uso dos dados com distĂąncias exatas e distĂąncias agrupadas. Para lidar com as repetiçÔes, testamos a anĂĄlise dos dados com todas as repetiçÔes e com o nĂșmero de repetiçÔes reduzidas. Essas estratĂ©gias estĂŁo descritas em Fluxos 1-3. No primero fluxo, comentamos tambĂ©m as escolhas feitas e os resultados obtidos. Os demais fluxos sĂŁo repetiçÔes deste primeiro fluxo, porĂ©m com mudança na estrutura dos dados.
Especies com maior numero de ocorrencias/UC possibilitam testar, posteriormente, estratificaçÔes nos dados, preservando um nĂșmero de ocorrĂȘncias satisfatĂłrio dentro dos estratos. Por isso começamos apresentando um fluxo completo de anĂĄlise, incluindo Amostragem por DistĂąncia Convencional, Amostragem por DistĂąncia com MĂșltiplas CovariĂĄveis e Amostragem por DistĂąncia com Estratificação nos dados com as espĂ©cies com maior nĂșmero de ocorrĂȘncia.
Fonte: biolib.cz
Essa Ă© a espĂ©cie com o mair nĂșmero de ocorrĂȘncias para uma mesma UC. Apresentou, como a maioria das espĂ©cies em diferentes UCs, um pico de ocorrĂȘncias prĂłximo a zero.
Para selecionar do conjunto de dados da espécie e a Unidade de
conservação de interesse, usar a função
transforma_para_distanceR_com_repeticao_filtra_uc_sp(),
especificando o nome da Unidade de conservação através do argumento
nome_uc e o nome da espécie através do argumento
nome_sp.
# carregar dados
cutia_tap_arap <- transforma_para_distanceR_com_repeticao_filtra_uc_sp(
nome_uc = "Resex Tapajos-Arapiuns",
nome_sp = "Dasyprocta croconota"
)
cutia_tap_arap
O histograma interativo estĂĄ disponĂvel no app em Shiny
app_distancia_interativo.R. A distribuição dos dados no
histograma permite observar um pico de observaçÔes próximo a zero, além
de uma considerĂĄvel perda em detectabilidade a partir dos 20m. Vamos
testar diferentes proporçÔes de truncamento. Ă possĂvel alterar a
binagem dos histogramas através do argumento largura_caixa.
Neste exemplo ajustamos para 1, o que facilita a observação de picos de
detecação e efeitos de heaping nos dados.
cutia_tap_arap |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 1)
Vamos explorar diferentes distùncias de truncamento para um mesmo modelo de distribuição half-normal. Optamos por truncar os dados pela percentagem para padronizar a rotina para diferentes espécies. Buckland et al. (2001) sugere um corte entre 5-10% das observaçÔes detectadas nas maiores distãncias. Vamos selecionar o valor de corte pelo modelo com melhor ajuste. Para os dados, testamos as seguintes proporçÔes de corte de dados: 5, 10, 15, 20 e 25% das observaçÔes mais distantes. Geramos uma tabela comparando os modelos e também plotamos os gråficos dos modelos ajustados para os dados truncados.
# conduz a selecao da melhor distancia de truncamento a partir do ajsute de modelos com funcao de deteccao half-normal sem termos de ajuste
cutia_tap_arap_dist_trunc <- cutia_tap_arap |>
selecionar_distancia_truncamento()
cutia_tap_arap_dist_trunc$selecao
Histogramas resultantes dos modelos, com todas as distùncias de truncagem, para auxiliar na seleção da melhor distãncia.
plotar_funcao_deteccao_selecao_distancia_truncamento(cutia_tap_arap_dist_trunc)
ApĂłs avaliar tanto o ajuste dos modelos quanto os grĂĄficos, optamos por truncar 15% das observaçÔes feitas nas maiores distĂąncias. Apesar dos melhores valores de AIC e de ajuste do CramĂ©r-von Mises para 25%, os histogramas com modelos ajustados para 25%, 20% e 15% apresentaram modelos quase lineares e com uma grande probabilidade de deteção nos Ășltimos intervalos de distĂąncia. O modelo com corte de 10% apresentou uma curva decrescente e nĂŁo tendeu a zero nas Ășltimas distĂąncias. JĂĄ no modelos para 5% as funçÔes de deteção tendem a zero nos Ășltimos intervalos de distĂąncia. O corte de 10% das observaçÔes mais distantes resultou em uma distĂąncia de truncamento de 15m.
As funçÔes de deteção são ajustadas através da função
ds() no pacote Distence para o R. Para otimizar o fluxo de
ajuste de funçÔes, empacotamos as diferentes combinaçÔes de funçÔes
chave e termos de ajustes em trĂȘs funçÔes. SĂŁo elas:
ajuste_modelos_distance_unif(), para distribuição uniforme
sem termos de ajuste e com termos de ajuste do tipo cosseno e polinomial
simples, ajuste_modelos_distance_hn() para distribuição
half-normal sem termos de ajuste e com termos de ajuste do tipo cosseno
e polinomial de hermite; e ajuste_modelos_distance_hr()
para distribuição hazard-rate sem termos de ajuste e com termos de
ajuste do tipo cosseno e polinomial simples. Para definir a distĂąncia de
truncamento dos dados Ă© necessĂĄrio fornecer o argumento
truncamento, que pode ser definido tanto em percentagem de
corte dos dados quanto em valor de distĂŁncia.
# ajustando a função de detecção uniforme para um truncamento de 10% dos dados
cutia_tap_arap_unif <- cutia_tap_arap |>
ajuste_modelos_distance_unif(truncamento = "10%")
Dentre as combinaçÔes de termos de ajustes para a função chave de distribuição uniforme, o Distance selecionou o modelo uniforme com ajuste polinomial simples, com as ordens 2, 4 e 6. Ele mantém esse modelo, e descarta os demais. Os Warnings indicando que a função de detecção não é estritamente monotÎnica avisam que os dados não foram constrangidos para a monotonicidade. Isso porque o uso de termos de ajustes, especialmente de ordens acima de 2, podem levar à perda da monotonidade (a curva pode se tornar crescente em algum momento, o que não é desejado). à preciso avaliar se a fala desse constragimento levou efetivamente à perda da monotonicidade ao olhar os gråficos de ajuste dos modelos.
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_tap_arap_hn <- cutia_tap_arap |>
ajuste_modelos_distance_hn(truncamento = "10%")
Neste caso, o modelo selecionado pelo Distance foi o Half-normal sem nenhum termo de ajuste.
# ajustando a função de detecção hazard-rate para um truncamento de 10% dos dados
cutia_tap_arap_hr <- cutia_tap_arap |>
ajuste_modelos_distance_hr(truncamento = "10%")
Aqui o melhor modelo selecionado pelo Distance foi o Hazard-rate sem os termos de ajuste. Nesse caso, também hå um warning para o problema na distribuição dos dados, que apresentam um pico próximo a distùncia zero e não são bem ajustados pelo hazard-hate.
Para comparar os modelos Ă© preciso avaliar trĂȘs critĂ©rios: AIC,
ajuste e forma das funçÔes nos gråficos e bondade de ajuste. O pacote
distance possui a função summarize_ds_modelsque gera uma
tabela com os modelos para comparação de alguns parùmetros: a primeira
coluna Model, indica as funçÔes chaves e respectivos
termos de ajuste; a coluna Formula apresenta as
covariĂĄveis, quando incluĂdas no modelo, ou ~1, quando nĂŁo hĂĄ
covariĂĄveis; C-vM p-value vai apresentar os valores de
p para o teste de bondade de ajuste de Cramér-von Mises; \(\hat{P_a}\) apresenta a probalidade de
deteção global estimada para cada modelo; se(\(\hat{P_a}\)) apresenta o erro padrão para
as estimativas de probabilidade de detecção; e \(\Delta\)AIC apresenta os valores de delta
AIC.
fluxo1_lista_modelos_ajustados <- list(
`half-normal` = cutia_tap_arap_hn,
`hazard-rate` = cutia_tap_arap_hr,
`uniforme` = cutia_tap_arap_unif
)
fluxo1_selecao_funcao_deteccao_termo_ajuste <- selecionar_funcao_deteccao_termo_ajuste(fluxo1_lista_modelos_ajustados)
fluxo1_selecao_funcao_deteccao_termo_ajuste
Dentre os modelos testados, o que apresentou melhor valor de ajuste e AIC foi o hazard-rate. O ajuste do Cramér-von Mises foi consideravelmente maior que os demais (para esse tipo de teste, quanto maior o valor de p, melhor o ajuste), assim como as diferenças no delta AIC foram bastante elevadas.
# gerar uma lista com os modelos selecionados ordenados do melhor para o pior modelo
fluxo1_modelos_selecionados <- list(
cutia_tap_arap_hr$`Sem termo`,
cutia_tap_arap_unif$`Cosseno`,
cutia_tap_arap_hn$`Cosseno`,
cutia_tap_arap_unif$`Polinomial simples`,
cutia_tap_arap_hn$`Sem termo`
)
# atribuir o nome dos modelos aos itens da lista
names(fluxo1_modelos_selecionados) <- fluxo1_selecao_funcao_deteccao_termo_ajuste$Model
# plotar a probabilidade de detecção observada (barras) e a esperada (linhas e pontos)
plotar_funcao_deteccao_modelos_selecionados(fluxo1_modelos_selecionados)
Olhando para os histogramas com modelos ajustados, Ă© possĂvel observar o efeito do acĂșmulo de observaçÔes prĂłximo a zero. O modelo com a função chave hazard-hate sem termos de ajuste, apesar de ter apresentado o melhor valor de ajuste pelo CramĂ©r-von Mises e o melhor valor de AIC, apresentou dois problemas. As probalidades de deteção estimadas por intevalo de distĂąncia (barras cinzas), ficaram muito baixas. AlĂ©m disso, a curva da função de deteção apresenta pico na distĂąncia prĂłxima a zero, decaindo rapidamente e se aproximando de zero ao longo do eixo das distĂŁncias. Todos os outros quatro modelos tiveram ajuste e AIC bastante inferiores ao hazard-hate. Entretanto as curvas estĂŁo relativamente melhores. As curvas do segundo e terceiro modelo, uniforme com ajuste cosseno e half-normal com ajuste cosseno, respectivamente, tendem Ă perda de monotonicidade. As duas Ășltimas curvas, para os modelos uniforme com ajuste polinomial simples e half-normal sem ajuste, nĂŁo perdem a monotonicidade. De forma geral, as probabilidades de detecção nĂŁo tĂȘm um bom ajuste abaixo da curva, e nĂŁo apresentam um decaimento gradual com a distĂąncia. Esses sĂŁo problemas inerentes Ă distribuição dos dados.
bondade_ajuste_fluxo1 <- testar_bondade_ajuste(fluxo1_modelos_selecionados, plot = TRUE)
bondade_ajuste_fluxo1
Aqui são gerados Q-Q plots que permitem avaliar a qualidade do ajuste dos modelos. E também uma tabela com os resultados do Carmér-von Mises, onde W é o valor do teste e p seu valor de significùncia. Nesse caso, quanto maior o valor de p, melhor o ajuste do modelo.
Aqui, sĂŁo resumidos os dados de taxa de encontro, abundĂąncia e densidade em trĂȘs tabelas.
# gera lista contendo os modelos selecionados para cada função de detecção e termo de ajuste
fluxo1_lista_modelos_ajustados_termos <- list(
cutia_tap_arap_hr$`Sem termo`,
cutia_tap_arap_hn$Cosseno,
cutia_tap_arap_unif$Cosseno,
cutia_tap_arap_unif$`Polinomial simples`,
cutia_tap_arap_hn$`Sem termo`
)
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, area coberta pelo esforço amostral, esforço amostral em metros, nĂșmero de detecçÔes, nĂșmero de transectos (ea), taxa de encontro, coeficiente de variação da taxa de encontro
fluxo1_caracteristicas_area_estudo_taxa_encontro <- fluxo1_lista_modelos_ajustados_termos |>
gerar_caracteristicas_area_estudo_taxa_encontro(resultado_selecao_modelos = fluxo1_selecao_funcao_deteccao_termo_ajuste)
fluxo1_caracteristicas_area_estudo_taxa_encontro
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, trilhas ou estaçÔes amostrais, esforço total em cada trilha, abundĂąncia estimada em cada estação amostral, nĂșmero de detecçÔes em cada estação amostral, ĂĄrea total amostrada
fluxo1_caracteristicas_esforco_abundancia_deteccao <- fluxo1_lista_modelos_ajustados_termos |>
gerar_caracteristicas_esforco_abundancia_deteccao(resultado_selecao_modelos = fluxo1_selecao_funcao_deteccao_termo_ajuste)
fluxo1_caracteristicas_esforco_abundancia_deteccao
# total, densidade estimada, erro padrão da densidade destimada, coeficiente de variação da densidade destimada, intervalo de confiança inferior e superior do coeficiente de variação, gruas de liberdade
fluxo1_caracteristicas_densidade <- fluxo1_lista_modelos_ajustados_termos |>
gerar_caracteristicas_densidade(resultado_selecao_modelos = fluxo1_selecao_funcao_deteccao_termo_ajuste)
fluxo1_caracteristicas_densidade
dados_selecionados <- carregar_dados_selecionados()
cutia_tap_arap_quase_sem_repeticao <- transforma_para_dsitanceR_quase_sem_repeticao_filtra_uc_sp_covariavel(
dados = dados_selecionados,
nome_uc = "Resex Tapajos-Arapiuns",
nome_sp = "Dasyprocta croconota"
)
cutia_tap_arap_quase_sem_repeticao
cutia_tap_arap_quase_sem_repeticao |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 1)
# conduz a selecao da melhor distancia de truncamento a partir do ajsute de modelos com funcao de deteccao half-normal sem termos de ajuste
cutia_tap_arap_quase_sem_repeticao_dist_trunc <- cutia_tap_arap_quase_sem_repeticao |>
selecionar_distancia_truncamento()
cutia_tap_arap_quase_sem_repeticao_dist_trunc$selecao
plotar_funcao_deteccao_selecao_distancia_truncamento(cutia_tap_arap_quase_sem_repeticao_dist_trunc)
# ajustando a função de detecção uniforme para um truncamento de 10% dos dados
cutia_tap_arap_quase_sem_repeticao_unif <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_unif(truncamento = "10%")
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_tap_arap_quase_sem_repeticao_hn <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_hn(truncamento = "10%")
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_tap_arap_quase_sem_repeticao_hr <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_hr(truncamento = "10%")
fluxo2_lista_modelos_ajustados <- list(
`half-normal` = cutia_tap_arap_quase_sem_repeticao_hn,
`hazard-rate` = cutia_tap_arap_quase_sem_repeticao_hr,
`uniforme` = cutia_tap_arap_quase_sem_repeticao_unif
)
fluxo2_selecao_funcao_deteccao_termo_ajuste <- selecionar_funcao_deteccao_termo_ajuste(fluxo2_lista_modelos_ajustados)
fluxo2_selecao_funcao_deteccao_termo_ajuste
# gerar uma lista com os modelos selecionados ordenados do melhor para o pior modelo
fluxo2_modelos_selecionados <- list(
cutia_tap_arap_quase_sem_repeticao_hr$`Sem termo`,
cutia_tap_arap_quase_sem_repeticao_hn$`Cosseno`,
cutia_tap_arap_quase_sem_repeticao_unif$`Cosseno`,
cutia_tap_arap_quase_sem_repeticao_unif$`Polinomial simples`,
cutia_tap_arap_quase_sem_repeticao_hn$`Sem termo`
)
# atribuir o nome dos modelos aos itens da lista
names(fluxo2_modelos_selecionados) <- fluxo2_selecao_funcao_deteccao_termo_ajuste$Model
# plotar a probabilidade de detecção observada (barras) e a esperada (linhas e pontos)
plotar_funcao_deteccao_modelos_selecionados(fluxo2_modelos_selecionados)
bondade_ajuste_fluxo2 <- testar_bondade_ajuste(fluxo2_modelos_selecionados, plot = TRUE)
bondade_ajuste_fluxo2
# gera lista contendo os modelos selecionados para cada função de detecção e termo de ajuste
fluxo2_lista_modelos_ajustados_termos <- list(
cutia_tap_arap_quase_sem_repeticao_hr$`Sem termo`,
cutia_tap_arap_quase_sem_repeticao_hn$`Cosseno`,
cutia_tap_arap_quase_sem_repeticao_unif$`Cosseno`,
cutia_tap_arap_quase_sem_repeticao_unif$`Polinomial simples`,
cutia_tap_arap_quase_sem_repeticao_hn$`Sem termo`
)
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, area coberta pelo esforço amostral, esforço amostral em metros, nĂșmero de detecçÔes, nĂșmero de transectos (ea), taxa de encontro, coeficiente de variação da taxa de encontro
fluxo2_caracteristicas_area_estudo_taxa_encontro <- fluxo2_lista_modelos_ajustados_termos |>
gerar_caracteristicas_area_estudo_taxa_encontro(resultado_selecao_modelos = fluxo2_selecao_funcao_deteccao_termo_ajuste)
fluxo2_caracteristicas_area_estudo_taxa_encontro
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, trilhas ou estaçÔes amostrais, esforço total em cada trilha, abundĂąncia estimada em cada estação amostral, nĂșmero de detecçÔes em cada estação amostral, ĂĄrea total amostrada
fluxo2_caracteristicas_esforco_abundancia_deteccao <- fluxo2_lista_modelos_ajustados_termos |>
gerar_caracteristicas_esforco_abundancia_deteccao(resultado_selecao_modelos = fluxo2_selecao_funcao_deteccao_termo_ajuste)
fluxo2_caracteristicas_esforco_abundancia_deteccao
# total, densidade estimada, erro padrão da densidade destimada, coeficiente de variação da densidade destimada, intervalo de confiança inferior e superior do coeficiente de variação, gruas de liberdade
fluxo2_caracteristicas_densidade <- fluxo2_lista_modelos_ajustados_termos |>
gerar_caracteristicas_densidade(resultado_selecao_modelos = fluxo2_selecao_funcao_deteccao_termo_ajuste)
fluxo2_caracteristicas_densidade
Aqui vamos partir do mesmo conjunto de dados do Fluxo 1
(cutia_tap_arap), com todas as repetiçÔes, mas vamos
agrupar as distĂąncias em intervalos. Vamos usar o mesmo valor de
truncamento, removendo 10% das observaçÔes nas maiores distùncias, o que
significa que aproveitaremos as observaçÔes feitas até 15m de distùncia
do observador.
O histograma interativo estĂĄ disponĂvel no app em Shiny
app_distancia_interativo.R.
Aqui, plotamos quatro histogramas com binagens diferentes, para observar o efeito de agrupar os dados sobre as distribuiçÔes das frequĂȘncias de ocorrĂȘncia nos histogramas.
cutia_tap_arap |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 1)
cutia_tap_arap |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 2)
cutia_tap_arap |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 3)
cutia_tap_arap |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 5)
cutia_tap_arap_bin1 <- create_bins(
cutia_tap_arap[!is.na(cutia_tap_arap$distance),],
c(0, 1.5, 3, 4.5, 6, 7.5, 9, 10.5, 12, 13.5, 15)
)
cutia_tap_arap_bin2 <- create_bins(
cutia_tap_arap[!is.na(cutia_tap_arap$distance),],
c(0, 1, 2.4, 3.8, 5.2, 6.6, 8, 9.4, 10.8, 12.2, 13.6, 15)
)
cutia_tap_arap_bin3 <- create_bins(
cutia_tap_arap[!is.na(cutia_tap_arap$distance),],
c(0, 2.5, 5, 7.5, 10, 12.5, 15)
)
Primeira Binagem
cutia_tap_arap_bin1_unif <- cutia_tap_arap_bin1 |>
ajuste_modelos_distance_unif(truncamento = 15)
Segunda binagem
cutia_tap_arap_bin2_unif <- cutia_tap_arap_bin2 |>
ajuste_modelos_distance_unif(truncamento = 15)
Terceira binagem
cutia_tap_arap_bin3_unif <- cutia_tap_arap_bin3 |>
ajuste_modelos_distance_unif(truncamento = 15)
Primeira binagem
cutia_tap_arap_bin1_hn <- cutia_tap_arap_bin1 |>
ajuste_modelos_distance_hn(truncamento = 15)
Segunda binagem
cutia_tap_arap_bin2_hn <- cutia_tap_arap_bin2 |>
ajuste_modelos_distance_hn(truncamento = 15)
Terceira binagem
cutia_tap_arap_bin3_hn <- cutia_tap_arap_bin3 |>
ajuste_modelos_distance_hn(truncamento = 15)
Primeira binagem
cutia_tap_arap_bin1_hr <- cutia_tap_arap_bin1 |>
ajuste_modelos_distance_hr(truncamento = 15)
Segunda binagem
cutia_tap_arap_bin2_hr <- cutia_tap_arap_bin2 |>
ajuste_modelos_distance_hr(truncamento = 15)
Terceira binagem
cutia_tap_arap_bin3_hr <- cutia_tap_arap_bin3 |>
ajuste_modelos_distance_hr(truncamento = 15)
fluxo3.1_lista_modelos_ajustados <- list(
`half-normal` = cutia_tap_arap_bin1_hn,
`hazard-rate` = cutia_tap_arap_bin1_hr,
`uniforme` = cutia_tap_arap_bin1_unif
)
fluxo3.1_selecao_funcao_deteccao_termo_ajuste <- selecionar_funcao_deteccao_termo_ajuste(fluxo3.1_lista_modelos_ajustados)
fluxo3.1_selecao_funcao_deteccao_termo_ajuste
fluxo3.2_lista_modelos_ajustados <- list(
`half-normal` = cutia_tap_arap_bin2_hn,
`hazard-rate` = cutia_tap_arap_bin2_hr,
`uniforme` = cutia_tap_arap_bin2_unif
)
fluxo3.2_selecao_funcao_deteccao_termo_ajuste <- selecionar_funcao_deteccao_termo_ajuste(fluxo3.2_lista_modelos_ajustados)
fluxo3.2_selecao_funcao_deteccao_termo_ajuste
fluxo3.3_lista_modelos_ajustados <- list(
`half-normal` = cutia_tap_arap_bin3_hn,
`hazard-rate` = cutia_tap_arap_bin3_hr,
`uniforme` = cutia_tap_arap_bin3_unif
)
fluxo3.3_selecao_funcao_deteccao_termo_ajuste <- selecionar_funcao_deteccao_termo_ajuste(fluxo3.3_lista_modelos_ajustados)
fluxo3.3_selecao_funcao_deteccao_termo_ajuste
Primeira binagem
fluxo3.1_modelos_selecionados <- list(
cutia_tap_arap_bin1_hn$`Cosseno`,
cutia_tap_arap_bin1_unif$`Cosseno`,
cutia_tap_arap_bin1_hr$`Sem termo`,
cutia_tap_arap_bin1_unif$`Polinomial simples`,
cutia_tap_arap_bin1_hn$`Sem termo`
)
plotar_funcao_deteccao_modelos_selecionados(fluxo3.1_modelos_selecionados)
Segunda binagem
fluxo3.2_modelos_selecionados <- list(
cutia_tap_arap_bin2_hn$`Cosseno`,
cutia_tap_arap_bin2_hr$`Sem termo`,
cutia_tap_arap_bin2_unif$`Cosseno`,
cutia_tap_arap_bin2_unif$`Polinomial simples`,
cutia_tap_arap_bin2_hn$`Sem termo`
)
plotar_funcao_deteccao_modelos_selecionados(fluxo3.2_modelos_selecionados)
Terceira binagem
fluxo3.3_modelos_selecionados <- list(
cutia_tap_arap_bin3_hn$`Cosseno`,
cutia_tap_arap_bin3_hr$`Cosseno`,
cutia_tap_arap_bin3_hr$`Polinomial simples`,
cutia_tap_arap_bin3_hr$`Sem termo`,
cutia_tap_arap_bin3_unif$`Cosseno`,
cutia_tap_arap_bin3_unif$`Polinomial simples`,
cutia_tap_arap_bin3_hn$`Sem termo`
)
plotar_funcao_deteccao_modelos_selecionados(fluxo3.3_modelos_selecionados)
Ainda estamos ajustando os outputs para os testes de bondade, pois a binagem um conflito com o formato de tabela definido pela função original.
Primeira binagem
Segunda binagem
Terceira binagem
Primeira binagem
# gera lista contendo os modelos selecionados para cada função de detecção e termo de ajuste
fluxo3.1_lista_modelos_ajustados_termos <- list(
cutia_tap_arap_bin1_hn$`Cosseno`,
cutia_tap_arap_bin1_unif$`Cosseno`,
cutia_tap_arap_bin1_hr$`Sem termo`,
cutia_tap_arap_bin1_unif$`Polinomial simples`,
cutia_tap_arap_bin1_hn$`Sem termo`
)
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, area coberta pelo esforço amostral, esforço amostral em metros, nĂșmero de detecçÔes, nĂșmero de transectos (ea), taxa de encontro, coeficiente de variação da taxa de encontro
fluxo3.1_caracteristicas_area_estudo_taxa_encontro <- fluxo3.1_lista_modelos_ajustados_termos |>
gerar_caracteristicas_area_estudo_taxa_encontro(resultado_selecao_modelos = fluxo3.1_selecao_funcao_deteccao_termo_ajuste)
fluxo3.1_caracteristicas_area_estudo_taxa_encontro
Segunda binagem
# gera lista contendo os modelos selecionados para cada função de detecção e termo de ajuste
fluxo3.2_lista_modelos_ajustados_termos <- list(
cutia_tap_arap_bin2_hn$`Cosseno`,
cutia_tap_arap_bin2_hr$`Sem termo`,
cutia_tap_arap_bin2_unif$`Cosseno`,
cutia_tap_arap_bin2_unif$`Polinomial simples`,
cutia_tap_arap_bin2_hn$`Sem termo`
)
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, area coberta pelo esforço amostral, esforço amostral em metros, nĂșmero de detecçÔes, nĂșmero de transectos (ea), taxa de encontro, coeficiente de variação da taxa de encontro
fluxo3.2_caracteristicas_area_estudo_taxa_encontro <- fluxo3.2_lista_modelos_ajustados_termos |>
gerar_caracteristicas_area_estudo_taxa_encontro(resultado_selecao_modelos = fluxo3.2_selecao_funcao_deteccao_termo_ajuste)
fluxo3.2_caracteristicas_area_estudo_taxa_encontro
Terceira binagem
# gera lista contendo os modelos selecionados para cada função de detecção e termo de ajuste
fluxo3.3_lista_modelos_ajustados_termos <- list(
cutia_tap_arap_bin3_hn$`Cosseno`,
cutia_tap_arap_bin3_hr$`Cosseno`,
cutia_tap_arap_bin3_hr$`Polinomial simples`,
cutia_tap_arap_bin3_hr$`Sem termo`,
cutia_tap_arap_bin3_unif$`Cosseno`,
cutia_tap_arap_bin3_unif$`Polinomial simples`,
cutia_tap_arap_bin3_hn$`Sem termo`
)
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, area coberta pelo esforço amostral, esforço amostral em metros, nĂșmero de detecçÔes, nĂșmero de transectos (ea), taxa de encontro, coeficiente de variação da taxa de encontro
fluxo3.3_caracteristicas_area_estudo_taxa_encontro <- fluxo3.3_lista_modelos_ajustados_termos |>
gerar_caracteristicas_area_estudo_taxa_encontro(resultado_selecao_modelos = fluxo3.3_selecao_funcao_deteccao_termo_ajuste)
fluxo3.3_caracteristicas_area_estudo_taxa_encontro
Primeira binagem
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, trilhas ou estaçÔes amostrais, esforço total em cada trilha, abundĂąncia estimada em cada estação amostral, nĂșmero de detecçÔes em cada estação amostral, ĂĄrea total amostrada
fluxo3.1_caracteristicas_esforco_abundancia_deteccao <- fluxo3.1_lista_modelos_ajustados_termos |>
gerar_caracteristicas_esforco_abundancia_deteccao(resultado_selecao_modelos = fluxo3.1_selecao_funcao_deteccao_termo_ajuste)
fluxo3.1_caracteristicas_esforco_abundancia_deteccao
Segunda binagem
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, trilhas ou estaçÔes amostrais, esforço total em cada trilha, abundĂąncia estimada em cada estação amostral, nĂșmero de detecçÔes em cada estação amostral, ĂĄrea total amostrada
fluxo3.2_caracteristicas_esforco_abundancia_deteccao <- fluxo3.2_lista_modelos_ajustados_termos |>
gerar_caracteristicas_esforco_abundancia_deteccao(resultado_selecao_modelos = fluxo3.2_selecao_funcao_deteccao_termo_ajuste)
fluxo3.2_caracteristicas_esforco_abundancia_deteccao
Terceira binagem
# ĂĄrea de estudo, tamanho da ĂĄrea de estudo, trilhas ou estaçÔes amostrais, esforço total em cada trilha, abundĂąncia estimada em cada estação amostral, nĂșmero de detecçÔes em cada estação amostral, ĂĄrea total amostrada
fluxo3.3_caracteristicas_esforco_abundancia_deteccao <- fluxo3.3_lista_modelos_ajustados_termos |>
gerar_caracteristicas_esforco_abundancia_deteccao(resultado_selecao_modelos = fluxo3.3_selecao_funcao_deteccao_termo_ajuste)
fluxo3.3_caracteristicas_esforco_abundancia_deteccao
Primeira binagem
# total, densidade estimada, erro padrão da densidade destimada, coeficiente de variação da densidade destimada, intervalo de confiança inferior e superior do coeficiente de variação, gruas de liberdade
fluxo3.1_caracteristicas_densidade <- fluxo3.1_lista_modelos_ajustados_termos |>
gerar_caracteristicas_densidade(resultado_selecao_modelos = fluxo3.1_selecao_funcao_deteccao_termo_ajuste)
fluxo3.1_caracteristicas_densidade
Segunda binagem
# total, densidade estimada, erro padrão da densidade destimada, coeficiente de variação da densidade destimada, intervalo de confiança inferior e superior do coeficiente de variação, gruas de liberdade
fluxo3.2_caracteristicas_densidade <- fluxo3.2_lista_modelos_ajustados_termos |>
gerar_caracteristicas_densidade(resultado_selecao_modelos = fluxo3.2_selecao_funcao_deteccao_termo_ajuste)
fluxo3.2_caracteristicas_densidade
Terceira binagem
# total, densidade estimada, erro padrão da densidade destimada, coeficiente de variação da densidade destimada, intervalo de confiança inferior e superior do coeficiente de variação, gruas de liberdade
fluxo3.3_caracteristicas_densidade <- fluxo3.3_lista_modelos_ajustados_termos |>
gerar_caracteristicas_densidade(resultado_selecao_modelos = fluxo3.3_selecao_funcao_deteccao_termo_ajuste)
fluxo3.3_caracteristicas_densidade
Aqui, vamos usar a abordagem do Fluxo 2, com amostragens reduzidas, para o ajuste de covariĂĄveis. Vamos usar o tamanho do grupo como covariĂĄvel.
Para o uso de coveriåveis, podemos usar somente as distribuiçÔes half-normal ou hazard-rate, pois ambas possuem o parùmetro escalar pelo qual o vetor das covariåveis serå multiplicado. Não é recomendåvel o uso de termos de ajuste com o uso de covariåveis pela grande chance de perda de monotonicidade nas curvas das funçÔes de detecção. Assim, vamos trabalhar com as seguintes combinaçÔes de modelos
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_cov_hn <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_hn(lista_termos_ajuste = list(`Sem termo`= NULL),truncamento = "10%")
lista_termos_ajuste = list(Sem termo) = NULL),
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_cov_hn_s <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_hn(lista_termos_ajuste = list(`Sem termo`= NULL),truncamento = "10%", formula = ~size)
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_cov_hr <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_hr(lista_termos_ajuste = list(`Sem termo`= NULL),truncamento = "10%")
# ajustando a função de detecção half-normal para um truncamento de 10% dos dados
cutia_cov_hr_s <- cutia_tap_arap_quase_sem_repeticao |>
ajuste_modelos_distance_hr(lista_termos_ajuste = list(`Sem termo`= NULL),truncamento = "10%", formula = ~size)
Ainda estamos ajustando a função para poder gerar a tabela com o resumo dos resultados. A função criada para gerar tabela ainda não comporta os dados de modelos com covariåveis.
Ainda estamos ajustando a função para poder gerar os gråficos dos modelos com covariåveis. A função criada para os gråficos ainda não comporta os dados de modelos com covariåveis.
cov_modelos_selecionados <- list(
cutia_cov_hn$`Sem termo`,
cutia_cov_hr$`Sem termo`
)
plotar_funcao_deteccao_modelos_selecionados(cov_modelos_selecionados)
Ainda estamos ajustando a função para poder gerar a tabela com os resultados do Cramér-von Mises e os gråficos dos modelos com covariåveis. A função criada para gerar tabela e os Q-Q plots ainda não comporta os dados de modelos com covariåveis.
bondade_ajuste_cov <- testar_bondade_ajuste(cov_modelos_selecionados, plot = TRUE)
bondade_ajuste_cov
Para o uso de covariĂĄveis, as estimativas de abundĂąncia/densidade
devem ser feitas através do bootstrap (função bootdht do
Distance). Ainda estamos implementando o bootstrap em nosso fluxo de
estimativas de taxa de encontro, abundĂąncia e densidade.